package com.iamteer.day17;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
主要回顾： Collections 工具类与 Arrays 工具类

Collection 与 Collections 的区别？
	1. Collection 是单列集合的根接口，Collections 是操作集合对象的一个工具类
	
Collections 常用方法：

	1. 对 List 进行二分查找：
		int binarySearch(list, key);
		int binarySearch(list, key, Comparator);
		
	2. 对 list 集合进行排序：
		sort(list);
		sort(list, comparator);
		
	3. 对集合取最大值或者最小值：
		max(collection);
		max(collection, comparator);
		min(collection);
		min(collection, comparator);
		
	4. 对 list 集合进行反转：
		reverse(list);
		
	5. 可以将不同步的集合变成同步的集合：
		Set synchronizedSet(Set<T> s);
		Map synchronizedMap(Map<K,V> m);
		List synchronizedList(List<T> list);

Arrays 常用方法：
	
	1. 复制数组
		copyOf(original, newLength);
		
	2. 复制部分数组
		copyOfRange();
		
	3. 比较 2 个数组元素是否相同
		equals();
		
	4. 将数组变成集合
		List asList(T[]);

 */

//隔壁有了个 Human 了。。。
class Human1{
	String name;
	int age;
	public Human1(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	@Override
	public String toString() {
		return "[姓名：" + this.name + "年龄：" + this.age + "]";
	}
	
	//下面重写 equals 方法和 hashCode 方法，重新定义相同的标准
	@Override
	public boolean equals(Object obj) {
		Human1 human = (Human1) obj;
		return this.age == human.age;
	}
	
	@Override
	public int hashCode() {
		return this.age;
	}
}


class AgeComparator implements Comparator<Human1>{
	@Override
	public int compare(Human1 o1, Human1 o2) {
		return o1.age - o2.age;
	}
}

public class Tools {

	public static void main(String[] args) {
//		collections();
		arrays();
	}

	public static void collections() {
		ArrayList<Integer> l1 = new ArrayList<Integer>();
		l1.add(12);
		l1.add(11);
		l1.add(21);
		l1.add(71);
		
		//排序
		System.out.println(l1);
		Collections.sort(l1);
		System.out.println(l1);
		
		//查找
		System.out.println(Collections.binarySearch(l1, 11));
		
		ArrayList<Human1> l2 = new ArrayList<Human1>();
		l2.add(new Human1("狗娃", 12));
		l2.add(new Human1("张三", 32));
		l2.add(new Human1("李四", 23));
		l2.add(new Human1("王五", 7));
		
		//自定义排序
		System.out.println(l2);
		Collections.sort(l2, new AgeComparator());
		System.out.println(l2);
		
		//查找
		System.out.println(Collections.binarySearch(l2, new Human1("狗娃", 12), new AgeComparator()));
		
		//变成线程安全
		l1 = (ArrayList<Integer>) Collections.synchronizedList(l1);
	}

	public static void arrays() {
		//数组复制：copyOf
		Integer[] arr = {10, 9, 8, 7, 6};	//可以比较 Integer[]与int[]的异同
		System.out.println(Arrays.toString(arr));
		Integer[] arr2 = Arrays.copyOf(arr, 6);
		System.out.println(Arrays.toString(arr2));
		
		//数组部分复制：copyOfRange
		Integer[] arr3 = Arrays.copyOfRange(arr, 1, 5);
		System.out.println(Arrays.toString(arr3));
		
		//比较数组元素：equals
		System.out.println(Arrays.equals(arr, arr2));
		
		//数组转换成集合
		List<Integer> list = Arrays.asList(arr);
		System.out.println(list);
	}
}
